﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RoleController : MonoBehaviour
{
    public BaseStatusInfo info;
    public AnimController AnimC;
    public EffectController EffectC;
    public MoveController MoveC;
    

    public TransformNetSender PosSender;
    public TransformNetGetter PosGetter;
    
    public Action<Vector2> MoveAction;
    public GameObject Role;

    public bool isLocalPlayer;

    /// <summary>
    /// 初始化函数
    /// </summary>
    /// <param name="Role"></param>
    /// <param name="info"></param>
    public void Init(GameObject Role, BaseStatusInfo info)
    {
        this.info = info;
        isLocalPlayer = info.isLocalPlayer;
        this.Role = Role;
        if (isLocalPlayer)
        {
            //本地玩家，添加到控制器上,并且次玩家添加同步发送transform信息脚本
            //todo 根据不同的模型添加不同的角色控制器
            MoveC = Role.AddComponent<MoveController>();
            MoveC.Init(Role.transform, this);
            //todo 添加角色技能管理器

        }
        else
        {
            //非本地玩家的其他角色，不添加手柄事件功能，不添加移动脚本,添加接受服务器同步信息脚本，动画也是同理
            //todo 判断是否是玩家还是其他生物，如果是玩家，不需要添加CharactorController,否则添加，方便服务器控制移动

        }
        //获得到角色后，给角色添加控制脚本
        AnimC = Role.AddComponent<AnimController>();
        AnimC.Init(Role.GetComponent<Animator>(),this);
        EffectC = Role.AddComponent<EffectController>();
        EffectC.Init();

        //判断是否是本玩家角色添加发送/接受脚本,开始等待发送位置消息/接受服务器位置更新
        if (isLocalPlayer)
        {
            PosSender = Role.AddComponent<TransformNetSender>();
            //开始发送位置信息
            PosSender.InitSender(true, true, true, AnimC,info.RolePos);
        }
        else
        {
            PosGetter = Role.AddComponent<TransformNetGetter>();
            //开始接受位置信息
            PosGetter.Init(Role.transform,AnimC, info.RolePos);
        }
    }
}
